import { Table, ITableOptions } from './table'

interface IOptions {
  dbName: string // *数据库名称
  version: number // 数据库版本号（默认为当前时间戳）
  tables: Array<ITableOptions>
}

/**
 * IndexedDB 使用对象
 *
 * 基本使用
 *
 * ```
 * cache.db = new Idb(dbConfig)
 *
 * let flag = await cache.db.open()
 *
 * ```
 */
class Idb extends Table {
  public options: IOptions
  constructor(opt: IOptions) {
    super({
      dbName: opt.dbName,
      version: opt.version
    })

    this.options = opt
  }

  /** 打开数据库
   *
   * 返回连接结果 / 放回表创建结果
   */
  async open(): Promise<boolean | Promise<any>> {
    try {
      let flag = await this.connect()
      if (!flag) {
        return Promise.reject(false)
      }

      // ITableOptions
      let creats: any = this.createTable(this.options.tables)

      return creats
    } catch (error) {
      return Promise.reject(false)
    }
  }
}

export { Idb }
